¿Cómo elegirías entre concurrencia con `CompletableFuture`, pools, colas o procesamiento síncrono?
¿Cómo elegirías entre concurrencia con `CompletableFuture`, pools, colas o procesamiento síncrono? en Java: criterios sobre asincronía y concurrencia, errore...
Esta pregunta de Java sobre "Cómo elegirías entre concurrencia con CompletableFuture, pools, colas o procesamiento síncrono" deja ver rápido si conviertes asincronía en decisiones operativas o si te quedas en teoría.
En una entrevista fuerte gana peso la persona que habla de costes, señales de degradación, deuda aceptada y plan de validación para "Cómo elegirías entre concurrencia con CompletableFuture, pools, colas o procesamiento síncrono", no solo de API o sintaxis.
Qué evalúa el entrevistador
- Si distingues qué parte de "Cómo elegirías entre concurrencia con
CompletableFuture, pools, colas o procesamiento síncrono" pertenece a asincronía y cuál debería resolverse en concurrencia. - Si conviertes la respuesta en criterios observables: límites claros, impacto en el mantenimiento y forma de detectar regresiones.
- Si sabes ubicar efectos, limpiezas, cancelación y propagación de errores sin contaminar la parte declarativa del código.
Respuesta sólida
- Distingue qué parte puede seguir siendo pura y qué parte necesita sincronizarse con el mundo exterior.
- Describe cómo controlarías suscripciones, cancelación, reintentos o cierre de recursos para que el componente no acumule efectos zombis.
- Si hay asincronía, aclara qué harías con estados intermedios, errores y cambios rápidos de entrada.
Compromisos y errores comunes
- El error habitual es usar efectos para derivar datos que podrían calcularse de forma pura o para tapar un mal diseño de dependencias.
- Sin cancelación ni limpieza es muy fácil dejar trabajo en vuelo, respuestas tardías o cierres obsoletos.
Ejemplo de código
Un ejemplo pequeño ayuda a ver dónde colocarías la lógica de asincronía en "Cómo elegirías entre concurrencia con CompletableFuture, pools, colas o procesamiento síncrono" y qué parte dejarías derivada o encapsulada.
CompletableFuture<User> userFuture = CompletableFuture.supplyAsync(() -> repository.loadUser(id));
CompletableFuture<Permissions> permissionsFuture = CompletableFuture.supplyAsync(() -> repository.loadPermissions(id));
UserProfile profile = userFuture
.thenCombine(permissionsFuture, UserProfile::new)
.orTimeout(2, TimeUnit.SECONDS)
.join();
Lo importante no es la API concreta, sino que la solución hace visible la fuente de verdad, el tratamiento del error y el punto exacto donde asincronía se sincroniza con concurrencia dentro de "Cómo elegirías entre concurrencia con CompletableFuture, pools, colas o procesamiento síncrono" en Java.
Ejemplo o caso real
Yo lo bajaría a un escenario reconocible de Java: una pieza donde "Cómo elegirías entre concurrencia con CompletableFuture, pools, colas o procesamiento síncrono" aparece de forma recurrente, ya ha dejado señales en revisión o en soporte y mezcla asincronía con concurrencia. Si la decisión mejora claridad, observabilidad y velocidad de cambio en ese trozo, entonces merece escalarla; si no, la dejaría local y documentada.
Frase corta de entrevista
Prefiero una solución comprobable y reversible a una respuesta brillante que nadie sepa mantener dentro de seis meses.
Marcarla como leída actualiza tu progreso.